package presentation;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

import core.Item;
/**
 * Egy elem megjelenítéséért felelős osztály.
 * 
 * @author Szabolcs
 *
 */
@SuppressWarnings("serial")
public class ShowItem extends JPanel {
	private Item item;
	private Color color;

	private JPanel header;
	private JLabel nameLabel;
	private JLabel priceLabel;

	private boolean selected = false;
	
	/**
	 * Inicializálja a mezőket.
	 * @param i az elem, amihez tartozik a megjelenítés
	 * @param c az elem csoportjának színe
	 */
	public ShowItem(Item i, Color c) {
		item = i;
		color = c;

		this.setLayout(new BorderLayout());
		this.setBackground(Color.WHITE);

		header = new JPanel();
		header.setBackground(color);
		this.add(header, BorderLayout.NORTH);

		nameLabel = new JLabel(item.getName());
		nameLabel.setFont(new Font("Arial", Font.PLAIN, 10));
		nameLabel.setHorizontalAlignment(SwingConstants.CENTER);
		this.add(nameLabel, BorderLayout.CENTER);

		if (item.hasPrice())
			priceLabel = new JLabel(Integer.toString(item.getPrice()));
		else
			priceLabel = new JLabel("");
		priceLabel.setFont(new Font("Arial", Font.ITALIC, 12));
		priceLabel.setHorizontalAlignment(SwingConstants.CENTER);
		this.add(priceLabel, BorderLayout.SOUTH);
	}

	/**
	 * A megjelenítés.
	 */
	public void paint(Graphics g) {
		super.paint(g);
		g.drawRect(0, 0, this.getWidth() - 1, this.getHeight() - 1);
		if (selected) {
			g.setColor(Color.RED);
			g.fillRect(0, 3 * this.getHeight() / 4, this.getWidth() / 4,
					this.getHeight());
			g.setColor(Color.BLACK);
		}

	}

	/**
	 * @return téríti az elem nevét
	 */
	public String getName() {
		return item.getName();
	}

	/**
	 * 
	 * @return téríti, hogy van-e ára
	 */
	public boolean hasPrice() {
		return item.hasPrice();
	}

	/**
	 * 
	 * @return téríti, hogy van-e színe
	 */
	public boolean hasColor() {
		return true;
	}

	/**
	 * 
	 * @return téríti a színét
	 */
	public Color getColor() {
		return color;
	}

	/**
	 * megjelöli az elemet (ha épp rajta áll a játékos)
	 */
	public void select() {
		selected = true;
		repaint();
	}

	/**
	 * leveszi az elemről a jelölést
	 */
	public void deselect() {
		selected = false;
		repaint();
	}

	/**
	 * 
	 * @return téríti a hozzá ratozó elemet
	 */
	public Item getItem() {
		return item;
	}

	/**
	 * jezli, hogy az épp soronlévő játékos biztokolja-e az elemet
	 */
	public void mark() {
		nameLabel.setForeground(new Color(255, 0, 0));
	}

	/**
	 * leveszi a jelzést, hogy az épp soronlévő játékos biztokolja-e az elemet
	 */
	public void unmark() {
		nameLabel.setForeground(new Color(0, 0, 0));
	}
}
